package com.sg.dto.biz.finance.common;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Objects;

/**
 * @desc FinanceAccountDto
 * @使用场景
 */
@Data
public class FinanceAccountDto extends BaseDto implements Serializable {

    /**
     * 账户ID
     */
    @ApiModelProperty("账户ID")
    private String accountId;

    /**
     * 账户标识
     */
    @ApiModelProperty("账户标识")
    private String accountCode;

    /**
     * 账户卡号
     */
    @ApiModelProperty("账户卡号")
    private String accountCardNumber;

    /**
     * 上级账户归属主体标识
     */
    @ApiModelProperty("上级账户归属主体标识")
    private String parentAccountContentCode;

    /**
     * 账户余额
     */
    @ApiModelProperty("账户余额")
    private Double accountActualBalance;

    /**
     * 可用金额
     */
    @ApiModelProperty("可用金额")
    private Double settlableBalance;

    /**
     * 冻结金额
     */
    @ApiModelProperty("冻结金额")
    private Double unSettlableBalance;

    /**
     * 累计结算金额
     */
    @ApiModelProperty("累计结算金额")
    private Double accruedSettledAmount;

    /**
     * 总金额
     */
    @ApiModelProperty("总金额")
    private Double totalBudgetAmount;

    /**
     * 账户状态 LOCK:锁定 NORMAL:正常
     */
    @ApiModelProperty("账户状态")
    private String accountStatus;

    /**
     * 是否结束状态 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否结束状态")
    private String isEndStatus;

    /**
     * 认证状态 UNCERTIFICATED:未认证 AUTHENTICATED:已认证 AUTHENTICATION_FAILURE:认证失败
     */
    @ApiModelProperty("认证状态")
    private String certificationStatus;

    /**
     * 账户类型 POOL_ACCOUNT:发行账户 ECOLOGICAL_ACCOUNT:生态账户
     */
    @ApiModelProperty("账户类型")
    private String accountTypeCode;

    /**
     * 是否预算账户 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否预算账户")
    private String isBudgetAccount;

    /**
     * 生态账户类型编码 ORG_POOL_ACCOUNT:组织发行账户 TARGET_CONTENT_ACCOUNT:目标内容账户
     */
    @ApiModelProperty("生态账户类型编码")
    private String ecologicalAccountTypeCode;

    /**
     * 账户关联主体分类类型 CONTENT_TYPE:内容分类 ORGANIZATIONAL_STRUCTURE_TYPE:组织架构分类
     */
    @ApiModelProperty("账户关联主体分类类型")
    private String accountObjectClass;

    /**
     * 关联归属主体ID
     */
    @ApiModelProperty("关联归属主体ID")
    private String accountObjectId;

    /**
     * 关联归属主体类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 DEPT:部门
     */
    @ApiModelProperty("关联归属主体类型编码")
    private String accountObjectTypeCode;

    /**
     * 关联归属主体标识
     */
    @ApiModelProperty("关联归属主体标识")
    private String accountContentCode;

    /**
     * 发行体系类型编码 CAPITAL_SYSTEM:资金体系 INTEGRAL_SYSTEM:积分体系
     */
    @ApiModelProperty("发行体系类型编码")
    private String distributionSystemTypeCode;

    /**
     * 是否组织正式财务标准 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否组织正式财务标准")
    private String isOrgOfficialAccountNom;
    /**
     * 是否到账账户 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否到账账户")
    private String isIncomingAccount;

    /**
     * 是否统计账户 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否统计账户")
    private String isStatisticalAccount;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        FinanceAccountDto that = (FinanceAccountDto) o;
        return accountId == that.accountId && accountCode == that.accountCode && accountCardNumber == that.accountCardNumber && parentAccountContentCode == that.parentAccountContentCode && accountActualBalance == that.accountActualBalance && settlableBalance == that.settlableBalance && unSettlableBalance == that.unSettlableBalance && accruedSettledAmount == that.accruedSettledAmount && totalBudgetAmount == that.totalBudgetAmount && accountStatus == that.accountStatus && isEndStatus == that.isEndStatus && certificationStatus == that.certificationStatus && accountTypeCode == that.accountTypeCode && isBudgetAccount == that.isBudgetAccount && ecologicalAccountTypeCode == that.ecologicalAccountTypeCode && accountObjectClass == that.accountObjectClass && accountObjectId == that.accountObjectId && accountObjectTypeCode == that.accountObjectTypeCode && accountContentCode == that.accountContentCode && distributionSystemTypeCode == that.distributionSystemTypeCode && isOrgOfficialAccountNom == that.isOrgOfficialAccountNom && isIncomingAccount == that.isIncomingAccount && isStatisticalAccount == that.isStatisticalAccount;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), accountId, accountCode, accountCardNumber, parentAccountContentCode, accountActualBalance, settlableBalance, unSettlableBalance, accruedSettledAmount, totalBudgetAmount, accountStatus, isEndStatus, certificationStatus, accountTypeCode, isBudgetAccount, ecologicalAccountTypeCode, accountObjectClass, accountObjectId, accountObjectTypeCode, accountContentCode, distributionSystemTypeCode, isOrgOfficialAccountNom, isIncomingAccount, isStatisticalAccount);
    }

}
